package cn.hd.commonService.utils;


import cn.hd.commonService.entity.TableGenerate;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;

import java.io.File;
import java.util.Collections;

@Component
public class CodeGenerationUtils {

    @Value("${spring.datasource.url}")
    private String url;
    @Value("${spring.datasource.username}")
    private String userName;
    @Value("${spring.datasource.password}")
    private String password;

    public void generate(TableGenerate tableGenerate){
        FastAutoGenerator.create(url, userName, password)
                .globalConfig(builder -> {
                    builder.author(tableGenerate.getCreateUser()) // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(tableGenerate.getOutputDir()); // 指定输出目录  和自己项目src一一对应
                })
                .packageConfig(builder -> {
                    builder.parent(tableGenerate.getPackageName()) // 设置父包名
                            .moduleName(null) // 设置父包模块名  解决路径冲突
                            .serviceImpl("service."+tableGenerate.getFunctionName()+".impl") //自定义包名imp 官方的是impi
                            .service("service."+tableGenerate.getFunctionName())
                            .mapper("mapper."+tableGenerate.getFunctionName())
                            .controller("controller."+tableGenerate.getFunctionName())
                            .pathInfo(Collections.singletonMap(OutputFile.xml,tableGenerate.getMapperPath()));
                })
                .strategyConfig(builder -> {
                    builder.entityBuilder().enableLombok();//使用lombok
                    builder.controllerBuilder().enableHyphenStyle()
                            .enableRestStyle();//开启RestController
                    builder.addInclude(tableGenerate.getTableName()); // 设置需要生成的表名

                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .strategyConfig(builder -> {
                    builder.entityBuilder().enableLombok();
                })
                .execute();
    }
}
